// 此router目录就是存放所定义的路由规则的目录，index.js就是定义规则的地方
// Vue.use ==>  Vue给开发提供的一个插件的加载方法
import Vue from 'vue'
import VueRouter from 'vue-router'

// 静态导入 模块化
import home from './routes/home'
import admin from './routes/admin'
import news from './routes/news'
import common from './routes/common'

// import myroutercmp from '@/views/myroutercmp.vue'
// import login from '@/views/login.vue'

// 通过插件的机制给加载到Vue中
Vue.use(VueRouter)

// 路由规则表 -- 精确匹配
const routes = [
  ...home,
  ...admin,
  ...news,
  {
    path: '/router/:id?',
    // component: myroutercmp,
    // 路由懒加载，在访问到此路由时才进行加载对于js文件
    // 回调函数，返回必须是一个promise对象
    component: () => import(/*webpackChunkName:'router111111'*/ '@/views/myroutercmp.vue'),
    // 路由独享守卫 -- 它不是每次都执行
    beforeEnter: (to, from, next) => {
      console.log('路由独享 - beforeEnter')
      next()
    },
    children: []
  },
  {
    path: '/login',
    // component: login,
    component: () => import('@/views/login.vue'),
    // 元信息，给路由规则添加额外的信息，用于描述当前定义的路由
    meta: {
      title: '用户登录',
      desn: '此路由规则要求用户不需要提前登录，就可以访问到',
      islogin: false
    }
  },
  ...common
]

// 定义路由规则的匹配程序
const router = new VueRouter({
  // 路由模式，web浏览器只支持 history/hash
  mode: 'history',
  // 路由规则表
  routes
})

// 全局守卫  它们都可以被调用N次
// 全局前置守卫
// to 目标路由对象
// from 来源路由对象
// next函数，执行它就会继续向下执行
router.beforeEach((to, from, next) => {
  // 它是所有的钩子函数执行最早的一个，每次都执行，一般在此处进行是否登录的判断
  // console.log('beforeEach')

  // 所有的人访问都会让我触发，我就判断谁要登录
  /* if (to.meta.islogin || to.meta.islogin == undefined) {
    // 进行是否已经登录的判断
    next({ path: '/login', replace: true })
  } else {
    next()
  } */

  // 守卫判断用户是否已经登录
  if (to.path.startsWith('/admin')) {
    if (!sessionStorage.getItem('token')) {
      next('/login')
    } else {
      next()
    }
  }else{
    next()
  }
})

/* router.beforeEach((to, from, next) => {
  // 它是所有的钩子函数执行最早的一个，每次都执行，一般在此处进行是否登录的判断
  console.log('beforeEach2')
  next()
}) */

// 全局解析守卫
router.beforeResolve((to, from, next) => {
  // console.log('beforeResolve')
  next()
})

// 全局后置守卫
router.afterEach((to, from) => {
  // console.log('afterEach')
})

export default router
